Was
Nachdem wir nun erfolgreich MagFiles für unser Projekt eingesetzt haben, wollen
wir noch eine kleine Ergänzung zu MagFiles liefern. MagFiles können
nämlich auch durch sogenannte Pseudo-Targets ergänzt werden.
Pseudo-Targets sind solche, deren Name nicht zur Erstellung einer Datei genutzt
wird. Das hat den Vorteil, dass die als pseudo deklarierten Targets immer
gebaut werden, da nicht geprüft würden muss, ob ihre Abhängigkeiten wiederum neuer sind
als des Targets selbst, da keins erstellt wird.
Um ein Target als Pseudo Target zu kennzeichnen wird es als Abhängigkeit des Spezialtargets
Punkt phony gesetzt.
Das sieht in etwa so aus.
Wenn wir nun die Pseudo Targets all und clean environment haben wollen, die selbst weder
rum keine eigenen Dateien sind, dann schreiben wir einen Target Punkt phony mit den Abhängigkeiten
All und Clean durch Leerzeichen getrennt.
Dadurch kann man nun Make zum Beispiel mit dem Argument All aufrufen, wodurch das All
Target ausgeführt wird, und zwar bedingungslos.
Da das All Target wiederum die Clash als Abhängigkeit hat, wird nun versucht, das Programm Clash
zu bauen.
Hier gelten wieder die normalen Abhängigkeitsregeln und Clash wird nur gebaut, falls die Abhängigkeiten
neuer sind als die Clash selbst.
Per Konvention hat man immer mindestens zwei Pseudotargets.
Einmal das Target All, das dafür verantwortlich ist, alles zu bauen, und das Target Clean,
das alle Artifakte des Entstehungsprozesses aufräumt.
Das bedeutet zum Beispiel alle.O-Dateien, die durch das Makefile selbst generiert wurden.
Damit der Aufruf von Clean nicht fehlschlägt, falls eine der zu löschenden Dateien nicht
existiert, sollte man beim Aufruf von Remove die Option binstrich f setzen, damit eben eine
fehlende Datei nicht zum Abbruch des Aufrufs führt.
Außerdem sollte das Pseudotarget All immer als erstes definiert sein, damit dies ausgeführt
wird, falls man Make ohne weiteres Argument ausführt.
Es ist wichtig, die Pseudotargets auch mit Phony als solche zu kennzeichnen.
Denn sonst könnte es passieren, dass man zum Beispiel eine Datei All im Dateisystem
liegen hat, die dazu führt, dass das All Target nicht mehr ausgeführt wird, falls die Datei
All jünger ist als alle Abhängigkeiten.
Zugänglich über
Offener Zugang
Dauer
00:02:39 Min
Aufnahmedatum
2020-06-21
Hochgeladen am
2020-06-21 23:16:34
Sprache
de-DE